/** @file
  Macro and type definitions corresponding to the QEMU TPM interface.

  Refer to "docs/specs/tpm.txt" in the QEMU source directory.

  Copyright (C) 2018, Red Hat, Inc.
  Copyright (c) 2018, IBM Corporation. All rights reserved.<BR>

  This program and the accompanying materials are licensed and made available
  under the terms and conditions of the BSD License which accompanies this
  distribution. The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/

#ifndef __QEMU_TPM_H__
#define __QEMU_TPM_H__

#include <Base.h>

//
// whether function is blocked by BIOS settings; bits 0, 1, 2
//
#define QEMU_TPM_PPI_FUNC_NOT_IMPLEMENTED     (0 << 0)
#define QEMU_TPM_PPI_FUNC_BIOS_ONLY           (1 << 0)
#define QEMU_TPM_PPI_FUNC_BLOCKED             (2 << 0)
#define QEMU_TPM_PPI_FUNC_ALLOWED_USR_REQ     (3 << 0)
#define QEMU_TPM_PPI_FUNC_ALLOWED_USR_NOT_REQ (4 << 0)
#define QEMU_TPM_PPI_FUNC_MASK                (7 << 0)

//
// The following structure is shared between firmware and ACPI.
//
#pragma pack (1)
typedef struct {
  UINT8  Func[256];           // func
  UINT8  In;                  // ppin
  UINT32 Ip;                  // ppip
  UINT32 Response;            // pprp
  UINT32 Request;             // pprq
  UINT32 RequestParameter;    // pprm
  UINT32 LastRequest;         // lppr
  UINT32 FRet;                // fret
  UINT8  Res1[0x40];          // res1
  UINT8  NextStep;            // next_step
} QEMU_TPM_PPI;
#pragma pack ()

//
// The following structure is for the fw_cfg etc/tpm/config file.
//
#pragma pack (1)
typedef struct {
  UINT32 PpiAddress;
  UINT8  TpmVersion;
  UINT8  PpiVersion;
} QEMU_FWCFG_TPM_CONFIG;
#pragma pack ()

#define QEMU_TPM_VERSION_UNSPEC    0
#define QEMU_TPM_VERSION_1_2       1
#define QEMU_TPM_VERSION_2         2

#define QEMU_TPM_PPI_VERSION_NONE  0
#define QEMU_TPM_PPI_VERSION_1_30  1

#endif
